/**
 * Copyright (C) 2005-2016 Alfresco Software Limited.
 *
 * This file is part of Alfresco
 *
 * Alfresco is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Alfresco is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * Extends the Property renderer ({@link module:alfresco/renderers/Property}) to provide a linked property.
 * 
 * @module alfresco/search/SearchResultPropertyLink
 * @extends alfresco/renderers/PropertyLink
 * @mixes alfresco/navigation/_HtmlAnchorMixin
 * @mixes alfresco/renderers/_SearchResultLinkMixin
 * @author Dave Draper
 */
define(["dojo/_base/declare",
        "alfresco/renderers/PropertyLink",
        "alfresco/navigation/_HtmlAnchorMixin",
        "alfresco/renderers/_SearchResultLinkMixin"], 
        function(declare, PropertyLink, _HtmlAnchorMixin, _SearchResultLinkMixin) {

   return declare([PropertyLink, _HtmlAnchorMixin, _SearchResultLinkMixin], {

      /**
       * Generates the publication payload by calling the mixed in 
       * [generatePayload]{@link module:alfresco/renderers/_SearchResultLinkMixin#generatePayload}
       * function and then wraps the property in an anchor element by calling the mixed in 
       * [makeAnchor]{@link module:alfresco/navigation/_HtmlAnchorMixin#makeAnchor} function
       *
       * @instance
       */
      postCreate: function alfresco_search_SearchResultPropertyLink__postCreate() {
         this.inherited(arguments);
         this.publishPayload = this.generateSearchLinkPayload(this.payload, this.currentItem, null, this.publishPayloadType, this.publishPayloadItemMixin, this.publishPayloadModifiers);
         this.makeAnchor(this.publishPayload.url, this.publishPayload.type);
      },

      /**
       * Returns an array containing the selector that identifies the span to wrap in an anchor.
       * This overrides the [mixed in function]{@link module:alfresco/navigation/_HtmlAnchorMixin}
       * that just returns an empty array.
       *
       * @instance
       */
      getAnchorTargetSelectors: function alfresco_search_SearchResultPropertyLink__getAnchorTargetSelectors() {
         return ["span.inner"];
      },

      /**
       * Overrides the [inherited function]{@link module:alfresco/renderers/PropertyLink#getPublishTopic}
       * to return the "ALF_NAVIGATE_TO_PAGE" topic.
       * 
       * @instance
       * @return {object} The generated payload
       */
      getPublishTopic: function alfresco_search_SearchResultPropertyLink__getPublishTopic() {
         return "ALF_NAVIGATE_TO_PAGE";
      },

      /**
       * Overrides the [inherited function]{@link module:alfresco/renderers/PropertyLink#getPublishPayload}
       * to return the payload generated by the [generatePayload function]
       * {@link module:alfresco/search/SearchResultPropertyLink#generatePayload}.
       * 
       * @instance
       * @return {object} The generated payload
       */
      getPublishPayload: function alfresco_search_SearchResultPropertyLink__getPublishPayload() {
         return this.publishPayload;
      }
   });
});